﻿// AI助手 - 兼容直接加载和AMD模块加载
(function(factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD模块
        define(['jquery', 'backend'], factory);
    } else {
        // 直接加载到全局
        window.AiHelper = factory(window.jQuery || window.$, window.Backend);
    }
})(function ($, Backend) {
    var AiHelper = {
        init: function () {
            this.bindEvents();
        },

        // AI图片生成方法
        generateImageByButton: function ($button) {
            var $input = $('#' + $button.data('input-id'));
            var prompt = $button.data('say') || '为这个班级生成一张有创意的封面图片';
            var width = $button.data('width') || '512';
            var height = $button.data('height') || '512';
            var size = width + '*' + height;
            var type = $button.data('type') || 'image';
            var style = $button.data('style') || 'school_poster';
            
            // 显示加载状态
            $button.prop('disabled', true);
            $button.find('i').addClass('fa-spin');
            $button.text('生成中...');

            // 调用AI生成
            AiHelper.generateImage(prompt, {
                width: width,
                height: height,
                size: size,
                type: type,
                style: style
            }, function (response) {
                // 恢复按钮状态
                $button.prop('disabled', false);
                $button.find('i').removeClass('fa-spin');
                $button.html('<i class="fa fa-magic"></i> AI自动');

                if (response.code === 1) {
                    // 保存图片
                    $input.val(response.data.image_url);

                    // 更新预览
                    var $preview = $button.closest('.form-group').find('.plupload-preview');
                    if ($preview.length > 0) {
                        $preview.show();
                        $preview.find('img').attr('src', response.data.image_url);
                        $preview.attr('src', response.data.image_url);
                    }

                    // 显示成功提示
                    if (window.Toastr) {
                        window.Toastr.success('AI图片生成成功');
                    } else if (window.alert) {
                        window.alert('AI图片生成成功');
                    } else {
                    }
                } else if (response.code === 0) {
                    // 显示错误提示
                    if (window.Toastr) {
                        window.Toastr.error('AI图片生成失败：' + (response.msg || '未知错误'));
                    } else if (window.alert) {
                        window.alert('AI图片生成失败：' + (response.msg || '未知错误'));
                    } else {
                        console.error('AI图片生成失败：' + (response.msg || '未知错误'));
                    }
                }
            });
        },

        bindEvents: function () {
            // 绑定AI生成图片按钮点击事件
            $(document).on('click', '.ai-generate-image', function (e) {
                e.preventDefault();
                var $button = $(this);
                var type = $button.data('type');
                if (type === 'ai-generate-header_image') {
                    AiHelper.generateImageByButton($button);
                } else if (type === 'ai-generate-cover') {
                    AiHelper.generateImageByButton($button);
                }
            });



            // 绑定AI生成文本按钮点击事件
            $(document).on('click', '.ai-generate-text', function (e) {
                e.preventDefault();
                var $button = $(this);
                var $form = $button.closest('form');
                var $input = $('#' + ($button.data('input-id') || 'c-intro'));

                // 获取表单数据
                var formData = $form.serializeArray();
                var prompt = AiHelper.generateTextPrompt(formData);

                // 显示加载状态
                $button.prop('disabled', true).addClass('disabled');
                $button.find('i').addClass('fa-spin');
                $button.html('<i class="fa fa-spinner fa-spin"></i> 生成中...');

                // 调用AI生成文本
                AiHelper.generateText(prompt, function (response) {
                    // 恢复按钮状态
                    $button.prop('disabled', false).removeClass('disabled');
                    $button.find('i').removeClass('fa-spin');
                    $button.html('<i class="fa fa-magic"></i> AI智能生成');

                    if (response.code === 1) {
                        // 设置生成的文本
                        $input.val(response.data.content);

                        // 显示成功提示
                        if (window.Toastr) {
                            window.Toastr.success('AI文本生成成功');
                        } else if (window.alert) {
                            window.alert('AI文本生成成功');
                        } else {
                        }
                    } else if (response.code === 0) {
                        // 显示错误提示
                        if (window.Toastr) {
                            window.Toastr.error('AI文本生成失败：' + (response.msg || '未知错误'));
                        } else if (window.alert) {
                            window.alert('AI文本生成失败：' + (response.msg || '未知错误'));
                        } else {
                            console.error('AI文本生成失败：' + (response.msg || '未知错误'));
                        }
                    }
                });
            });
        },

        // 设置编辑器内容的通用方法
        setEditorContent: function($element, content) {
            try {
                // 检查是否是富文本编辑器
                if ($element.hasClass('editor') || $element.hasClass('summernote')) {
                    // 尝试不同的富文本编辑器

                    // 1. 尝试 Summernote
                    if ($.fn.summernote && typeof $element.summernote === 'function') {
                        try {
                            $element.summernote('code', content);
                            $element.trigger('change');
                            return;
                        } catch (e) {
                        }
                    }

                    // 2. 尝试 UEditor
                    if (typeof UE !== 'undefined' && UE.getEditor) {
                        var editor = UE.getEditor($element.attr('id'));
                        if (editor) {
                            editor.setContent(content);
                            return;
                        }
                    }

                    // 3. 尝试 CKEditor
                    if (typeof CKEDITOR !== 'undefined' && CKEDITOR.instances) {
                        var editor = CKEDITOR.instances[$element.attr('id')];
                        if (editor) {
                            editor.setData(content);
                            return;
                        }
                    }

                    // 4. 尝试 TinyMCE
                    if (typeof tinymce !== 'undefined') {
                        var editor = tinymce.get($element.attr('id'));
                        if (editor) {
                            editor.setContent(content);
                            return;
                        }
                    }

                    // 5. 最后回退到普通文本框
                    $element.val(content);
                } else {
                    // 普通文本框
                    $element.val(content);
                }

                // 触发change事件
                $element.trigger('change');

            } catch (error) {
                // 出错时回退到普通文本框
                $element.val(content);
                $element.trigger('change');
            }
        },

        generatePrompt: function (formData, currentValue) {
            // 获取AI配置
            var config = window.config || {};
            var stylePrefs = config['ai']['style_preferences'] || {};
            var styleTemplate = stylePrefs['school_poster'] ? stylePrefs['school_poster']['prompt_template'] : '';

            // 构建基础提示词
            var prompt = styleTemplate;

            // 添加当前值作为参考
            if (currentValue) {
                prompt += '\n参考图片：' + currentValue;
            }

            // 添加表单中的相关信息
            $.each(formData, function (index, field) {
                if (field.name === 'row[name]') {
                    prompt += '\n班级名称：' + field.value;
                }
                if (field.name === 'row[intro]') {
                    prompt += '\n班级介绍：' + field.value;
                }
                if (field.name === 'row[nianji]') {
                    prompt += '\n年级：' + field.value;
                }
            });

            // 添加具体要求
            prompt += '\n\n具体要求：\n';
            prompt += '1. 尺寸：512*512\n';
            prompt += '2. 人物：以老年人为主，展现积极向上的精神面貌\n';
            prompt += '3. 风格：简洁现代，适合教育场景\n';
            prompt += '4. 色彩：温暖明亮\n';
            prompt += '5. 布局：清晰有层次，适合做封面使用\n';
            prompt += '6. 元素：包含与教育相关的元素\n';

            return prompt;
        },

        generateTextPrompt: function (formData) {
            // 根据表单数据生成AI文本提示词
            debugger;
            var prompt = '请根据以下班级信息生成一段专业的班级介绍，要求：\n\n';

            var className = '';
            var grade = '';
            var currentIntro = '';

            // 提取表单中的相关信息
            $.each(formData, function (index, field) {
                if (field.name === 'row[name]') {
                    className = field.value;
                    prompt += '班级名称：' + field.value + '\n';
                }
                if (field.name === 'row[nianji]') {
                    grade = field.value;
                    prompt += '年级：' + field.value + '\n';
                }
                if (field.name === 'row[intro]' && field.value) {
                    currentIntro = field.value;
                    prompt += '当前介绍：' + field.value + '\n';
                }
            });

            prompt += '\n生成要求：\n';
            prompt += '1. 内容要专业、准确、有吸引力\n';
            prompt += '2. 字数控制在100-300字之间\n';
            prompt += '3. 突出班级特色和教学优势\n';
            prompt += '4. 语言要通俗易懂，适合招生宣传\n';
            prompt += '5. 如果有当前介绍，请在此基础上优化改进\n\n';
            prompt += '请生成班级介绍内容：';

            return prompt;
        },

        // 获取图片尺寸
        getImageSize: function($button) {
            // 优先从按钮data属性获取尺寸
            var width = $button.data('width');
            var height = $button.data('height');
            
            if (width && height) {
                return width + '*' + height;
            }
            
            // 如果没有指定尺寸，使用默认值
            return '512*512';
        },

        generateImage: function (prompt, options, callback) {
            // 兼容旧的调用方式：generateImage(prompt, callback)
            if (typeof options === 'function') {
                callback = options;
                options = {};
            }

            // 从按钮data属性获取尺寸和类型
            var $button = $(document.activeElement);
            var width = $button.data('width') || options.width || '512';
            var height = $button.data('height') || options.height || '512';
            var type = $button.data('type') || options.type || 'image';
            var style = $button.data('style') || options.style || 'school_poster';
            var size = width + '*' + height;
            $.ajax({
                url: '/?s=ai/generateImage',
                type: 'POST',
                data: {
                    prompt: prompt,
                    size: size,
                    width: width,
                    height: height,
                    type: options.type || 'image',
                    style: options.style || 'school_poster'
                },
                dataType: 'json',
                success: function (response) {
                    callback(response);
                },
                error: function (xhr, status, error) {
                    callback({
                        code: 0,
                        msg: '请求失败：' + error + ' (状态码: ' + xhr.status + ')'
                    });
                }
            });
        },

        generateText: function (prompt, options, callback) {
            // 兼容旧的调用方式：generateText(prompt, callback)
            if (typeof options === 'function') {
                callback = options;
                options = {};
            }

            // 设置默认选项
            options = options || {};
            var type = options.type || 'class_intro';
            var maxTokens = options.max_tokens || 500;
            var temperature = options.temperature || 0.7;
            var provider = options.provider || 'qianwen';
            $.ajax({
                url: '/ysapi/v1/AiHelper/generateText',
                type: 'POST',
                data: {
                    prompt: prompt,
                    type: type,
                    max_tokens: maxTokens,
                    temperature: temperature,
                    provider: provider
                },
                dataType: 'json',
                success: function (response) {
                    callback(response);
                },
                error: function (xhr, status, error) {
                    callback({
                        code: 0,
                        msg: '请求失败：' + error + ' (状态码: ' + xhr.status + ')'
                    });
                }
            });
        }
    };

    return AiHelper;
});
